package arena

import (
	"go.mongodb.org/mongo-driver/bson/primitive"
	"server/game/player"
)

type ArenaMsg struct {
	ID             primitive.ObjectID `bson:"_id,omitempty"`        // MongoDB 自动生成的唯一 ID
	AttackUID      string             `bson:"attack_uid"`           // 进攻方 UID
	AttackName     string             `bson:"attack_name"`          // 进攻方名称
	DefendUID      string             `bson:"defend_uid"`           // 防守方 UID
	DefendName     string             `bson:"defend_name"`          // 防守方名称
	AttackTime     int64              `bson:"attack_time"`          // 进攻时间
	AttackPosition int                `bson:"attack_position"`      // 进攻方排名
	DefendPosition int                `bson:"defend_position"`      // 防守方排名
	AttackRes      int                `bson:"attack_res"`           // 挑战结果
	AttackReplayID int                `bson:"attack_replay"`        // 战报 ID
	CreatedAt      primitive.DateTime `bson:"created_at,omitempty"` // 创建时间
}
type Arena struct {
	UID               string             `bson:"uid"`                     // 用户ID
	Position          int                `bson:"position"`                // 位置排名
	LastChallengeTime int64              `bson:"last_challenge_time"`     // 上次挑战时间
	ChallengeNum      int                `bson:"challenge_num"`           // 今天挑战次数，每天4点清0
	LastBuyTime       int64              `bson:"last_buy_challenge_time"` // 上次购买挑战次数的时间
	AddedChallengeNum int                `bson:"added_challenge_num"`     // 额外补充的挑战次数
	CurSuc            int                `bson:"cur_suc"`                 // 当前连胜场次
	HistoryMaxSuc     int                `bson:"history_max_suc"`         // 历史最大连胜场次
	HistoryMinPos     int                `bson:"history_min_position"`    // 历史最好的排名
	UpgradeContinue   int                `bson:"upgrade_continue"`        // 连续上升的名次
	FightCdTime       int64              `bson:"fight_cdtime"`            // 战斗CD时间
	VaOpponents       []int              `bson:"va_opponents"`            // 5 个对手的位置
	RewardTime        int64              `bson:"reward_time"`             // 发奖励时间
	VaReward          map[string]int     `bson:"va_reward"`               // 奖励信息 (e.g. {"belly": 100, "prestige": 50})
	CreatedAt         primitive.DateTime `bson:"created_at,omitempty"`    // 创建时间
	UpdatedAt         primitive.DateTime `bson:"updated_at,omitempty"`    // 更新时间
	Opponents         []Arena            `bson:"opponents" json:"opponents"`
	UserInfo          player.Player      `bson:"user_info" json:"user_info"`
}

type ArenaShopList struct {
	ShopList []ArenaShopList `bson:"shop_list" json:"shop_list"`
}
type ArenaShopInfo struct {
	UserId      string `json:"user_id" bson:"user_id"`
	ItemId      int    `json:"item_id" bson:"item_id"`
	LingQuTimes int    `json:"ling_qu_times" bson:"ling_qu_times"`
}

const (
	OPPONENT_BEFOR     = 3
	OPPONENT_AFTER     = 2
	FREE_CHALLENGE_NUM = 20
	FIGHT_CDTIME       = 180
	LAST_DAYS          = 3
	LOCK_TIME          = "22:00:00"
	OPEN_TIME          = "22:30:00"
	Lcck_key           = "arena#"
	CDTIME_PER_GOLD    = 60
	MIN_CONTINUE_END   = 15
	Buy_times          = 15
	JJC_Shop_Bi        = 10000001
	SHOP_MAX           = 14
)

// 定义竞技场广播相关的常量
const (
	// 第一名优先级
	PRI_TOP1 = 0
	// 连胜被终止优先级
	PRI_CONTINUE_END = 1
	// 连胜次数优先级
	PRI_CONTINUE_SUC = 2
	// 连续上升名次优先级
	PRI_UPGRADE_CONTINUE = 3
	// 终结连胜广播的最小连胜次数
)

// ARR_CONTINUE_SUC 连胜次数与对应广播优先级的映射
var ARR_CONTINUE_SUC = map[int]int{
	15: 0,
	20: 1,
	30: 2,
	50: 3,
}

// ARR_UPGRADE_CONTINUE 连续上升名次与对应广播优先级的映射
var ARR_UPGRADE_CONTINUE = map[int]int{
	200:  0,
	500:  1,
	800:  2,
	1000: 3,
}

type BattleMsg struct {
	WenTiId     int32 `json:"wen_ti_id" bson:"wen_ti_id"`
	HuiHeNum    int   `bson:"hui_he_num" json:"hui_he_num"`
	AktCardId   int64 `bson:"akt_card_id" json:"akt_card_id"`
	AktedCardId int64 `json:"akted_card_id" bson:"akted_card_id"`
	IsWin       bool  `bson:"is_win" json:"is_win"`
}
type BattleMsgList struct {
	Msg []BattleMsg `bson:"msg", json:"msg"`
}
